package lib

//link to 224 282 
func init() {
	Probs = append(Probs, Problem{
		Num:         227,
		Discription: "只有+-/*的计算器",
		Level:       2,
		Labels: map[string]int{
			"栈":   1,
		},
	})
}

//思想：把乘除的结果提前计算，然后做正常的加减
func Calculate2(s string) int {
	//合并乘除结果后的数字
	numS := make([]int, 0)
	//当前的运算符
	curOp := byte('+')
	i := 0
	for i < len(s) {
		ch := s[i]
		switch ch {
		case ' ':
			i++
		case '+', '-', '/', '*':
			curOp = ch
			i++
		default:
			//得到数字
			num := 0
			for i < len(s) && s[i] >= '0' && s[i] <= '9' {
				num = num*10 + int(s[i]-'0')
				i++
			}
			//根据当前的符号操作
			//加减直接进栈，当然减要反向
			//乘除线后栈顶元素计算，然后更新栈顶
			switch curOp {
			case '-':
				numS = append(numS, -num)
			case '*':
				numS[len(numS)-1] = numS[len(numS)-1] * num
			case '/':
				numS[len(numS)-1] = numS[len(numS)-1] / num
			default:
				numS = append(numS, num)
			}
		}
	}

	//把栈中所有的数字加起来
	res := 0
	for len(numS) != 0 {
		res += numS[len(numS)-1]
		numS = numS[:len(numS)-1]
	}

	return res
}
